package com.linghu.study.springbootshirojwtdemo.service.Impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.linghu.study.springbootshirojwtdemo.bean.Record;
import com.linghu.study.springbootshirojwtdemo.mapper.RecordMapper;
import com.linghu.study.springbootshirojwtdemo.service.RecordService;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.sql.Time;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.List;

@Service
public class RecordServiceImpl implements RecordService {

    @Resource
    RecordMapper recordMapper;


    //日志信息的插入实现
    @Async//异步调用添加日志访客的方法
    @Override
    public void insertLog(Record record) {
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        int i = recordMapper.insert(record);
        System.out.println(i > 0 ? "日志插入成功" : "日志插入失败");
    }



    //查询日志信息，查询一小时以前的记录信息，后续方便删除，使用了MybatisPlus的条件查询器了
    @Override
    public List<Record> findSuperOneHourLog() {
        /**
         * 通过条件查询器设置条件，将满足一小时以前的记录信息取出来
         */

        // 创建 QueryWrapper 对象
        QueryWrapper<Record> queryWrapper = new QueryWrapper<>();

        // 获取当前时间
        LocalDateTime now = LocalDateTime.now();

        // 计算一个小时前的时间
        LocalDateTime oneHourAgo = now.minusHours(1);

        // 将一个小时前的时间格式化为字符串
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String oneHourAgoStr = oneHourAgo.format(formatter);

        // 在 QueryWrapper 中添加条件
        queryWrapper.lt("timestamp", oneHourAgoStr);
        // 调用 Mapper 的查询方法
        return recordMapper.selectList(queryWrapper);
    }

    /**
     * 通过条件查询器设置条件，将满足一小时以前的记录信息从db中删除
     */

//    @Scheduled(fixedDelay = 60000)//每60s执行一次
    @Scheduled(fixedDelay = 3600000)//每60s执行一次
    @Override
    public void delLog() {
        /**
         * 通过条件查询器设置条件，将满足一小时以前的记录信息取出来
         */

        // 创建 QueryWrapper 对象
        QueryWrapper<Record> queryWrapper = new QueryWrapper<>();

        // 获取当前时间
        LocalDateTime now = LocalDateTime.now();

        // 计算一个小时前的时间
        LocalDateTime oneHourAgo = now.minusHours(1);

        // 将一个小时前的时间格式化为字符串
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String oneHourAgoStr = oneHourAgo.format(formatter);

        // 在 QueryWrapper 中添加条件
        queryWrapper.lt("timestamp", oneHourAgoStr);
        int i = recordMapper.delete(queryWrapper);
        System.out.println(i > 0 ? "日志删除成功" : "日志删除失败");
    }
}
